package com.redhat.ceylon.eclipse.core.debug.actions; import static com.redhat.ceylon.eclipse.code.editor.Navigation.gotoDeclaration; import static com.redhat.ceylon.eclipse.code.outline.HierarchyView.showHierarchyView; import static com.redhat.ceylon.eclipse.util.JavaSearch.isCeylonDeclaration; import static com.redhat.ceylon.eclipse.util.JavaSearch.toCeylonDeclaration; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.internal.debug.ui.actions.ActionMessages; import org.eclipse.jdt.internal.debug.ui.actions.OpenTypeAction; import org.eclipse.ui.PartInitException; import com.redhat.ceylon.model.typechecker.model.Declaration; public abstract class CeylonOpenTypeAction extends OpenTypeAction { @Override protected Object resolveSourceElement(Object e) throws CoreException { return super.resolveSourceElement(e); } @Override protected void openInEditor(Object sourceElement) throws CoreException { if (sourceElement instanceof IJavaElement && isCeylonDeclaration((IJavaElement) sourceElement)) { IJavaElement javaElement = (IJavaElement) sourceElement; IProject project = javaElement.getJavaProject().getProject(); if (isHierarchy()) { Declaration declaration = toCeylonDeclaration(project, javaElement); if (declaration!=null) { try { showHierarchyView().focusOn(declaration); return; } catch (PartInitException e) { e.printStackTrace(); } } typeHierarchyError(); } else { Declaration declaration = toCeylonDeclaration(project, javaElement); if (declaration != null) { gotoDeclaration(declaration); return; } showErrorMessage(ActionMessages.OpenTypeAction_2); } } else { super.openInEditor(sourceElement); } } }